{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Model: Support Vector Machine"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Importing Libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import _pickle as pickle\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import precision_score, recall_score, accuracy_score, f1_score, confusion_matrix, classification_report\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Loading in Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_excel('../top10_corr_features.xlsx')\n",
    "df = df.drop(df.columns[0], axis = 1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Scaling the Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "scaler = StandardScaler()\n",
    "\n",
    "features_df = df.drop([\"Decision\"], 1)\n",
    "\n",
    "scaled_df = pd.DataFrame(scaler.fit_transform(features_df), \n",
    "                               index=features_df.index, \n",
    "                               columns=features_df.columns)\n",
    "\n",
    "df = scaled_df.join(df.Decision)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Splitting the Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop([\"Decision\"], 1)\n",
    "y = df.Decision\n",
    "\n",
    "# Train, test, split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Helper Functions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Function for plotting confusion matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_confusion_matrix(y_true, y_pred, labels=[\"Sell\", \"Buy\", \"Hold\"], \n",
    "                          normalize=False, title=None, cmap=plt.cm.coolwarm):\n",
    "\n",
    "    cm = confusion_matrix(y_true, y_pred)\n",
    "    fig, ax = plt.subplots(figsize=(12,6))\n",
    "    im = ax.imshow(cm, interpolation='nearest', cmap=cmap)\n",
    "    ax.figure.colorbar(im, ax=ax)\n",
    "    # We want to show all ticks...\n",
    "    ax.set(xticks=np.arange(cm.shape[1]),\n",
    "           yticks=np.arange(cm.shape[0]),\n",
    "           # ... and label them with the respective list entries\n",
    "           xticklabels=labels, yticklabels=labels,\n",
    "           title=title,\n",
    "           ylabel='ACTUAL',\n",
    "           xlabel='PREDICTED')\n",
    "    # Rotate the tick labels and set their alignment.\n",
    "    plt.setp(ax.get_xticklabels(), rotation=45, ha=\"right\",\n",
    "             rotation_mode=\"anchor\")\n",
    "    # Loop over data dimensions and create text annotations.\n",
    "    fmt = '.2f' if normalize else 'd'\n",
    "    thresh = cm.max() / 1.5\n",
    "    for i in range(cm.shape[0]):\n",
    "        for j in range(cm.shape[1]):\n",
    "            ax.text(j, i, format(cm[i, j], fmt),\n",
    "                    ha=\"center\", va=\"center\",\n",
    "                    color=\"snow\" if cm[i, j] > thresh else \"orange\",\n",
    "                    size=26)\n",
    "    ax.grid(False)\n",
    "    fig.tight_layout()\n",
    "    return ax"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Modeling\n",
    "The preferred evaluation metric used will be __Precision__ for each class.  They will be optimized using the __F1 Score-Macro-Average__ to balance the Precision and Recall.  This is done because we want to not only be correct when predicting but also make a decent amount of predictions for each class.  Classes such as 'Buy' and 'Sell' are more important than 'Hold'."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Fitting and Training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
       "    decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
       "    kernel='rbf', max_iter=-1, probability=False, random_state=None,\n",
       "    shrinking=True, tol=0.001, verbose=False)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Importing the model\n",
    "from sklearn.svm import SVC\n",
    "\n",
    "# Fitting and training\n",
    "clf = SVC()\n",
    "clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Printing out Evaluation Metrics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "        Sell       0.29      0.67      0.40         6\n",
      "         Buy       0.33      0.11      0.17         9\n",
      "        Hold       0.00      0.00      0.00         2\n",
      "\n",
      "    accuracy                           0.29        17\n",
      "   macro avg       0.21      0.26      0.19        17\n",
      "weighted avg       0.28      0.29      0.23        17\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "# Classifier predictions\n",
    "pred = clf.predict(X_test)\n",
    "\n",
    "#Printing out results\n",
    "report = classification_report(y_test, pred, target_names=['Sell', 'Buy', 'Hold'])\n",
    "print(report)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Confusion Matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_confusion_matrix(y_test, pred, title=\"Confusion Matrix\")\n",
    "np.set_printoptions(precision=1)\n",
    "# Plot non-normalized confusion matrix\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Tuning Model Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import GridSearchCV"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Parameters to Tune\n",
    "params = {\"C\": [.01,.1,1],\n",
    "          \"kernel\":['rbf','sigmoid','linear']}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fitting 3 folds for each of 9 candidates, totalling 27 fits\n",
      "[CV] C=0.01, kernel=rbf ..............................................\n",
      "[CV]  C=0.01, kernel=rbf, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] C=0.01, kernel=rbf ..............................................\n",
      "[CV]  C=0.01, kernel=rbf, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] C=0.01, kernel=rbf ..............................................\n",
      "[CV]  C=0.01, kernel=rbf, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] C=0.01, kernel=sigmoid ..........................................\n",
      "[CV]  C=0.01, kernel=sigmoid, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] C=0.01, kernel=sigmoid ..........................................\n",
      "[CV]  C=0.01, kernel=sigmoid, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] C=0.01, kernel=sigmoid ..........................................\n",
      "[CV]  C=0.01, kernel=sigmoid, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] C=0.01, kernel=linear ...........................................\n",
      "[CV]  C=0.01, kernel=linear, score=(train=0.243, test=0.202), total=   0.0s\n",
      "[CV] C=0.01, kernel=linear ...........................................\n",
      "[CV]  C=0.01, kernel=linear, score=(train=0.239, test=0.208), total=   0.0s\n",
      "[CV] C=0.01, kernel=linear ...........................................\n",
      "[CV]  C=0.01, kernel=linear, score=(train=0.310, test=0.200), total=   0.0s\n",
      "[CV] C=0.1, kernel=rbf ...............................................\n",
      "[CV]  C=0.1, kernel=rbf, score=(train=0.204, test=0.202), total=   0.0s\n",
      "[CV] C=0.1, kernel=rbf ...............................................\n",
      "[CV]  C=0.1, kernel=rbf, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] C=0.1, kernel=rbf ...............................................\n",
      "[CV]  C=0.1, kernel=rbf, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] C=0.1, kernel=sigmoid ...........................................\n",
      "[CV]  C=0.1, kernel=sigmoid, score=(train=0.204, test=0.202), total=   0.0s"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[Parallel(n_jobs=1)]: Using backend SequentialBackend with 1 concurrent workers.\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done   1 out of   1 | elapsed:    0.0s remaining:    0.0s\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done   2 out of   2 | elapsed:    0.0s remaining:    0.0s\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done   3 out of   3 | elapsed:    0.0s remaining:    0.0s\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done   4 out of   4 | elapsed:    0.0s remaining:    0.0s\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "[CV] C=0.1, kernel=sigmoid ...........................................\n",
      "[CV]  C=0.1, kernel=sigmoid, score=(train=0.201, test=0.208), total=   0.0s\n",
      "[CV] C=0.1, kernel=sigmoid ...........................................\n",
      "[CV]  C=0.1, kernel=sigmoid, score=(train=0.205, test=0.200), total=   0.0s\n",
      "[CV] C=0.1, kernel=linear ............................................\n",
      "[CV]  C=0.1, kernel=linear, score=(train=0.425, test=0.238), total=   0.0s\n",
      "[CV] C=0.1, kernel=linear ............................................\n",
      "[CV]  C=0.1, kernel=linear, score=(train=0.323, test=0.282), total=   0.0s\n",
      "[CV] C=0.1, kernel=linear ............................................\n",
      "[CV]  C=0.1, kernel=linear, score=(train=0.340, test=0.275), total=   0.0s\n",
      "[CV] C=1, kernel=rbf .................................................\n",
      "[CV] . C=1, kernel=rbf, score=(train=0.461, test=0.262), total=   0.0s\n",
      "[CV] C=1, kernel=rbf .................................................\n",
      "[CV] . C=1, kernel=rbf, score=(train=0.349, test=0.282), total=   0.0s\n",
      "[CV] C=1, kernel=rbf .................................................\n",
      "[CV] . C=1, kernel=rbf, score=(train=0.340, test=0.359), total=   0.0s\n",
      "[CV] C=1, kernel=sigmoid .............................................\n",
      "[CV]  C=1, kernel=sigmoid, score=(train=0.341, test=0.216), total=   0.0s\n",
      "[CV] C=1, kernel=sigmoid .............................................\n",
      "[CV]  C=1, kernel=sigmoid, score=(train=0.346, test=0.261), total=   0.0s\n",
      "[CV] C=1, kernel=sigmoid .............................................\n",
      "[CV]  C=1, kernel=sigmoid, score=(train=0.315, test=0.253), total=   0.0s\n",
      "[CV] C=1, kernel=linear ..............................................\n",
      "[CV]  C=1, kernel=linear, score=(train=0.425, test=0.238), total=   0.0s"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "[CV] C=1, kernel=linear ..............................................\n",
      "[CV]  C=1, kernel=linear, score=(train=0.478, test=0.322), total=   0.0s\n",
      "[CV] C=1, kernel=linear ..............................................\n",
      "[CV]  C=1, kernel=linear, score=(train=0.466, test=0.307), total=   0.0s\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n",
      "[Parallel(n_jobs=1)]: Done  27 out of  27 | elapsed:    0.3s finished\n",
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\model_selection\\_search.py:813: DeprecationWarning: The default of the `iid` parameter will change from True to False in version 0.22 and will be removed in 0.24. This will change numeric results when test-set sizes are unequal.\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=3, error_score='raise-deprecating',\n",
       "             estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n",
       "                           decision_function_shape='ovr', degree=3,\n",
       "                           gamma='auto_deprecated', kernel='rbf', max_iter=-1,\n",
       "                           probability=False, random_state=None, shrinking=True,\n",
       "                           tol=0.001, verbose=False),\n",
       "             iid='warn', n_jobs=None,\n",
       "             param_grid={'C': [0.01, 0.1, 1],\n",
       "                         'kernel': ['rbf', 'sigmoid', 'linear']},\n",
       "             pre_dispatch='2*n_jobs', refit=True, return_train_score=True,\n",
       "             scoring='f1_macro', verbose=5)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "search = GridSearchCV(clf, params, cv=3, return_train_score=True, verbose=5, scoring='f1_macro')\n",
    "\n",
    "search.fit(X,y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Tuned Results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mean Training Score: 0.29046214846700397\n",
      "Mean Testing Score: 0.38177000529941707\n",
      "\n",
      "Best Parameter Found:\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'C': 1, 'kernel': 'rbf'}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(\"Mean Training Score:\", np.mean(search.cv_results_['mean_train_score']))\n",
    "print(\"Mean Testing Score:\", search.score(X, y))\n",
    "print(\"\\nBest Parameter Found:\")\n",
    "search.best_params_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Model with the Best Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\svm\\base.py:193: FutureWarning: The default value of gamma will change from 'auto' to 'scale' in version 0.22 to account better for unscaled features. Set gamma explicitly to 'auto' or 'scale' to avoid this warning.\n",
      "  \"avoid this warning.\", FutureWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "SVC(C=1, cache_size=200, class_weight=None, coef0=0.0,\n",
       "    decision_function_shape='ovr', degree=3, gamma='auto_deprecated',\n",
       "    kernel='rbf', max_iter=-1, probability=False, random_state=None,\n",
       "    shrinking=True, tol=0.001, verbose=False)"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "search_clf = search.best_estimator_\n",
    "\n",
    "search_clf.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Results from Optimum Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "        Sell       0.29      0.67      0.40         6\n",
      "         Buy       0.33      0.11      0.17         9\n",
      "        Hold       0.00      0.00      0.00         2\n",
      "\n",
      "    accuracy                           0.29        17\n",
      "   macro avg       0.21      0.26      0.19        17\n",
      "weighted avg       0.28      0.29      0.23        17\n",
      "\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\72445\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\classification.py:1437: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples.\n",
      "  'precision', 'predicted', average, warn_for)\n"
     ]
    }
   ],
   "source": [
    "# Classifier predictions\n",
    "s_pred = search_clf.predict(X_test)\n",
    "\n",
    "#Printing out results\n",
    "report = classification_report(y_test, s_pred, target_names=['Sell', 'Buy', 'Hold'])\n",
    "print(report)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Confusion Matrix for Optimum Parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_confusion_matrix(y_test, s_pred, title=\"Confusion Matrix\")\n",
    "np.set_printoptions(precision=1)\n",
    "# Plot non-normalized confusion matrix\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
